from flask import Flask, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

@app.route('/api/test', methods=['GET'])
def test():
    return jsonify({'success': True, 'message': 'Hello World!'})

@app.route('/api/status', methods=['GET'])
def status():
    return jsonify({
        'success': True,
        'message': 'API服务运行正常',
        'version': '1.0.0',
        'endpoints': ['/api/test', '/api/status', '/api/cities']
    })

@app.route('/api/cities', methods=['GET'])
def cities():
    # 尝试从高德地图API获取城市数据
    try:
        import requests
        from api_keys import GAODE_API_KEY
        
        # 使用高德地图API获取全国所有城市列表
        url = "https://restapi.amap.com/v3/config/district"
        params = {
            'key': GAODE_API_KEY,
            'keywords': '中国',
            'subdistrict': 3,  # 获取到县级
            'extensions': 'base',
            'page': 1,
            'offset': 1000  # 增加返回数量
        }
        
        response = requests.get(url, params=params, timeout=5)
        data = response.json()
        
        if data.get('status') == '1' and data.get('districts'):
            # 解析高德地图返回的城市数据
            cities = []
            
            def extract_cities(districts, level=0):
                """递归提取所有城市和县城"""
                for district in districts:
                    district_level = district.get('level', '')
                    district_name = district.get('name', '')
                    
                    # 包含市级、县级、区级
                    if district_level in ['city', 'district', 'county']:
                        # 清理城市名称
                        clean_name = district_name.replace('市', '').replace('县', '').replace('区', '')
                        if clean_name and len(clean_name) > 1:  # 过滤掉太短的名字
                            cities.append({
                                'id': len(cities) + 1,
                                'name': clean_name,
                                'full_name': district_name,
                                'code': district.get('adcode', ''),
                                'center': district.get('center', ''),
                                'level': district_level
                            })
                    
                    # 递归处理子区域
                    if district.get('districts'):
                        extract_cities(district['districts'], level + 1)
            
            # 开始提取
            extract_cities(data['districts'])
            
            # 去重（按名称去重）
            unique_cities = []
            seen_names = set()
            for city in cities:
                if city['name'] not in seen_names:
                    unique_cities.append(city)
                    seen_names.add(city['name'])
            
            # 按名称排序
            unique_cities.sort(key=lambda x: x['name'])
            
            # 重新分配ID
            for i, city in enumerate(unique_cities):
                city['id'] = i + 1
            
            return jsonify({
                'success': True,
                'cities': unique_cities,
                'source': f'高德地图API - 全国城市数据（包含{len(unique_cities)}个城市/县城）',
                'total': len(unique_cities),
                'api_response': {
                    'status': data.get('status'),
                    'info': data.get('info'),
                    'count': data.get('count')
                }
            })
        else:
            raise Exception("高德地图API返回数据格式错误")
            
    except Exception as e:
        print(f"获取高德地图城市数据失败: {e}")
        # 如果高德地图API失败，返回扩展的城市列表
        return jsonify({
            'success': True,
            'cities': [
                {'id': 1, 'name': '北京', 'code': 'BJS'},
                {'id': 2, 'name': '上海', 'code': 'SHA'},
                {'id': 3, 'name': '广州', 'code': 'CAN'},
                {'id': 4, 'name': '深圳', 'code': 'SZX'},
                {'id': 5, 'name': '杭州', 'code': 'HGH'},
                {'id': 6, 'name': '南京', 'code': 'NJH'},
                {'id': 7, 'name': '武汉', 'code': 'WHN'},
                {'id': 8, 'name': '成都', 'code': 'CDW'},
                {'id': 9, 'name': '西安', 'code': 'XAY'},
                {'id': 10, 'name': '重庆', 'code': 'CQW'},
                {'id': 11, 'name': '天津', 'code': 'TJP'},
                {'id': 12, 'name': '青岛', 'code': 'QDK'},
                {'id': 13, 'name': '大连', 'code': 'DLT'},
                {'id': 14, 'name': '沈阳', 'code': 'SYT'},
                {'id': 15, 'name': '哈尔滨', 'code': 'HBB'},
                {'id': 16, 'name': '长春', 'code': 'CCT'},
                {'id': 17, 'name': '石家庄', 'code': 'SJP'},
                {'id': 18, 'name': '太原', 'code': 'TYV'},
                {'id': 19, 'name': '呼和浩特', 'code': 'HHC'},
                {'id': 20, 'name': '银川', 'code': 'YIJ'}
            ],
            'source': '扩展城市列表（高德API失败）',
            'total': 20
        })

@app.route('/api/search', methods=['POST'])
def search():
    from flask import request
    data = request.get_json()
    
    # 模拟搜索结果
    mock_routes = [
        {
            'total_time': 3.5,
            'total_price': 1200,
            'transfers': 1,
            'details': [
                {
                    'type': 'high_speed_rail',
                    'origin': data.get('origin', '北京'),
                    'destination': data.get('destination', '深圳'),
                    'departure_time': '08:00',
                    'arrival_time': '11:30',
                    'price': 1200
                }
            ]
        }
    ]
    
    return jsonify({
        'success': True,
        'routes': mock_routes,
        'message': f'为您找到 {len(mock_routes)} 条路线'
    })

@app.route('/api/chat', methods=['POST'])
def chat():
    from flask import request
    data = request.get_json()
    message = data.get('message', '')
    
    # 简单的AI回复
    if '北京' in message and '上海' in message:
        response = '🚄 从北京到上海有直达高铁！\n\nG1次列车\n⏰ 08:00 - 12:30 (4.5小时)\n💰 票价：¥553\n🎫 建议提前购票\n\n💡 其他选择：\n✈️ 飞机：约2-3小时，¥800-1200\n🚌 长途汽车：约8-12小时，¥200-400\n🚗 自驾：约12小时'
    elif '深圳' in message:
        response = '🔄 从北京到深圳没有直达高铁，为您推荐联运方案：\n\n方案1：北京 → 武汉 → 深圳 (高铁+高铁)\n⏱️ 总时间：6.5小时\n💰 总费用：¥650\n🔄 换乘：1次\n\n方案2：北京 → 郑州 → 深圳 (高铁+高铁)\n⏱️ 总时间：7.2小时\n💰 总费用：¥580\n🔄 换乘：1次\n\n💡 其他选择：\n✈️ 飞机：约3小时，¥1200\n🚌 长途汽车：约21小时，¥350\n🚗 自驾：约20小时'
    else:
        response = '您好！我是您的智能出行助手，可以帮您规划最优路线。请告诉我您的出发地、目的地和出行时间，我会为您提供最合适的交通方案！'
    
    return jsonify({
        'success': True,
        'response': response,
        'intent': {
            'type': 'route_search',
            'confidence': 0.9
        }
    })

if __name__ == '__main__':
    print("启动简单测试服务...")
    app.run(debug=True, host='0.0.0.0', port=5000)